草庐IT

c++ - std::equal_range 与 lambda

全部标签

c++ - 为满足条件的类专门化 `std::hash`

假设我有一个简单的bool特征类,MyTrait.也就是说,对于任何类型T,我能做到MyTrait::value并得到true或false。我想专攻std::hash适用于所有类型T其中MyTrait::value是真的。有什么办法吗?一些失败的尝试:template::value,int>::type=0>structhash{...}失败是因为:error:defaulttemplateargumentinaclasstemplatepartialspecialization我还尝试将所有部分特化的东西放在散列之后,但随后出现了T的错误消息处于非推导上下文中。有什么办法吗?至少之前

c++ - std::nothrow 未按预期工作 - 条件始终为假

#includeintmain(){int*xx=new(std::nothrow)int[2];if(xx==NULL){exit(1);}return0;}我正在尝试使用nothrow,但是clion说关于xx==NULL“条件始终为假”,以及关于exit(1)那个“无法访问的代码”。我做错了什么? 最佳答案 这是CLion中的错误-CPP-989 关于c++-std::nothrow未按预期工作-条件始终为假,我们在StackOverflow上找到一个类似的问题:

c++ - std::cout 在具有静态存储持续时间的对象的构造函数中的使用

在C++98/C++03中具有静态存储持续时间的对象的构造函数中使用std::cout是否安全?从这个看来answer它不是,但它不包含标准中的任何引用。只有在C++11和C++14中才安全吗? 最佳答案 来自C++14(N3797),§27.4p2:Theobjectsareconstructedandtheassociationsareestablishedatsometimepriortoorduringthefirsttimeanobjectofclassios_base::Initisconstructed,andinan

c++ - 使用 std::aligned_union 和 std::aligned_union 为小型缓冲区优化别名

我正在研究std::function的小缓冲区优化实现-像对象。Boost实现了boost::function的小缓冲区像这样:unionfunction_buffer{mutablevoid*obj_ptr;structtype_t{constdetail::sp_typeinfo*type;boolconst_qualified;boolvolatile_qualified;}type;mutablevoid(*func_ptr)();structbound_memfunc_ptr_t{void(X::*memfunc_ptr)(int);void*obj_ptr;}bound_m

c++ - 从非常大的范围返回非重复的随机值

我想要一个函数,它可以从一组n个整数(0到n-1)中产生k个伪随机值,而不重复任何先前的结果。k小于或等于n。O(n)内存是NotAcceptable因为n的大小很大以及我需要重新洗牌的频率。这些是我到目前为止考虑过的方法:数组:通常,如果我想要无重复的随机值,我会打乱一个数组,但那是O(n)内存。n可能太大而无法工作。longnextvalue(void){staticlongarray[4000000000];staticints=0;if(s==0){for(inti=0;in态PRNG:有多种随机数生成器可以设计为具有n的周期。并访问n那个时期的独特状态。最简单的例子是:lon

c++ - 在C/C++中使用stdio文件操作时如何检测磁盘空间不足?

我正在做一个小程序如下:voidreserve_file_space(char*file_path,size_tamount){FILE*fp=fopen(file_path,"w+b");if(!fp){printf("couldnotcreateanewfile\n");return;}intfseek_ret=fseek(fp,amount,SEEK_SET);if(fseek_ret!=0){printf("couldnotseektothedesiredposition\n");fclose(fp);return;}chargarbage=1;size_tret=fwrite

c++ - 将函数指针实现替换为 std::function 以在 PlayFab SDK 中使用 lambda

我目前正在尝试包含PlayFabC++SDK进入我的应用程序。该SDK主要针对游戏引擎Cocos2d-x,但基本上可以用于任何C++应用。它只是普通的REST,因此您向他们的服务器发送请求并等待响应。这非常适合使用lambda。他们声明了这个回调,当请求成功时调用:templateusingProcessApiCallback=void(*)(constResType&result,void*userData);不幸的是,他们没有使用std::function,而是一个函数指针。这样就不能使用捕获变量的lambda。因此,我想我可以简单地用std::function回调替换这个函数指针

c++ - 关于 pthread_cond_wait?

我有以下代码:typedefstruct{...volatileinti_lines_completed;pthread_mutex_tmutex;q265_pthread_cond_tcv;...}q265_picture_t;voidq265_frame_cond_broadcast(q265_picture_t*frame,inti_lines_completed){pthread_mutex_lock(&frame->mutex);frame->i_lines_completed=i_lines_completed;pthread_cond_broadcast(&frame->

c++ - 你能在第 3 方 dll 中使用 std::string 吗?

我一直在寻找我的问题的答案,但似乎大多数人都对跨.dll边界传递std::string感兴趣。但我更感兴趣的是在我正在创建的.dll中的类中使用std::string。我正在向论坛上的一群人发布我的.dll(通过电子邮件发送),所以我的问题是你可以在.dll中使用std::string而没有像编译器需要相同这样的限制,版本,CRT需要相同等。你能举例说明什么是不安全的,什么是安全的吗?示例:“下载器”使用SetSender函数是否安全?邮件.hclass_declspec(dllexport)Mail{structENVELOPE{std::wstringSenderEmail;//S

c++ - 为什么 Microsoft 的 std::string 实现需要堆栈上的 40 个字节?

最近看了thisvideo关于facebook的string实现,我很想看看Microsoft实现的内部结构。不幸的是,字符串文件(在%VisualStudioDirectory%/VC/include中)似乎不包含实际定义,而只是包含转换函数(例如atoi)和一些运算符重载。我决定从用户级程序中对它进行一些探索和研究。当然,我做的第一件事就是测试sizeof(std::string)。令我惊讶的是,std::string需要40个字节!(无论如何在64位机器上。)前面提到的视频详细介绍了facebook的实现如何只需要24个字节而gcc的实现需要32个字节,所以这至少可以说是令人震惊